import axios from 'axios'
import {
  Message
} from 'element-ui'
import qs from 'qs'
import router from '../router/index'
// 超时时间
axios.defaults.timeout = 100000;

//设置跨域传递cookie
axios.defaults.withCredentials = true;

//设置请求格式请求头,传递的数据格式
// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';

axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8';

// axios.defaults.transformRequest = data => qs.stringify(data);

// 访问地址

if (process.env.NODE_ENV == 'development') {
  axios.defaults.baseURL = "http://localhost:8888";
} else if (process.env.NODE_ENV == 'production') {
  axios.defaults.baseURL = "http://124.70.184.65:8888";
}

/*
 * 请求拦截器
 * token校验：接收服务器返回的token，存储到vuex或者本地，每次向服务器发请求，应该把token带上
 */

axios.interceptors.request.use(config => {
  if (config.methods.toLowerCase() === 'post') {
    config.data = qs.stringify(config.data)
  }
  //携带token
  let token = window.localStorage.getItem("token");
  //若token存在，加上token
  token && (config.headers.Authorization = "Bearer" + " " + token);
  return config
}, error => {
  return Promise.reject(error);
});

// 响应拦截器
axios.interceptors.response.use(
  response => {
    // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据
    // 否则的话抛出错误
    console.log(response);
    if (response.data.code === 20000) {
      return Promise.resolve(response);
    } else {
      return Promise.reject(response);
    }
  },
  // 服务器状态码不是2开头的的情况
  error => {
    if (response.error.data.code) {
      switch (error.data.code) {
        // 401: 未登录
        case 30002:
          Message.error("登陆已过期，请重新登录！");
          router.replace({
            path: '/',
            query: {
              redirect: router.currentRoute.fullPath
            }
          });
          break;
        case 40003:
          Message.error('管理员权限已修改请重新登录')
          // 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面
          setTimeout(() => {
            router.replace({
              path: '/403',
              query: {
                redirect: router.currentRoute.fullPath
              }
            });
          }, 1000);
          break;

          // 404请求不存在
        case 40004:
          Message.error('请求页面飞到火星去了')
          router.replace({
            path: '/404'
          })
          break;
        case 50000:
          Message.error('服务器错误')
          break;
        default:
          router.replace({
            path: '/404'
          });
      }
      return Promise.reject(error.response);
    }
  });

export default axios;
